package tp1_UI;

import java.util.List;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.CheckBox;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.Selector;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.MainWindow;

import tp1.Casillero;
import tp1_Model.Mapa;

/**
 * @author martin
 * 
 *         Esta clase es la vista de Mapa
 * 
 */

public class MapaWindow extends MainWindow<Mapa> {

	// ////////////////////////////
	public MapaWindow() {
		super(new Mapa(10));

		// TODO Auto-generated constructor stub
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.uqbar.arena.windows.Window#createContents(org.uqbar.arena.widgets
	 * .Panel)
	 */
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.uqbar.arena.windows.Window#createContents(org.uqbar.arena.widgets
	 * .Panel)
	 */
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.uqbar.arena.windows.Window#createContents(org.uqbar.arena.widgets
	 * .Panel)
	 */
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.uqbar.arena.windows.Window#createContents(org.uqbar.arena.widgets
	 * .Panel)
	 */
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.uqbar.arena.windows.Window#createContents(org.uqbar.arena.widgets
	 * .Panel)
	 */
	@Override
	public void createContents(Panel mainPanel) {
		this.setTitle("Dragon Ball");
		mainPanel.setLayoutInColumns(1);
		Panel cabecera = new Panel(mainPanel);
		cabecera.setLayoutInColumns(2);
		Panel detcabecera = new Panel(mainPanel);
		detcabecera.setLayoutInColumns(2);
		Panel muestra = new Panel(mainPanel);
		muestra.setHorizontalLayout();
		Panel creador = new Panel(mainPanel);
		creador.setLayoutInColumns(4);
		Panel confirmCreador = new Panel(mainPanel);
		confirmCreador.setHorizontalLayout();
		Panel acciones = new Panel(mainPanel);
		acciones.setHorizontalLayout();

		// Crea primero la lista y luego muestra un selector
		Selector selectorPersonaje = new Selector(cabecera);
		selectorPersonaje.setContents(this.getModel().getPersonajesEnElMapa(), "nombre").bindValueToProperty(
				Mapa.PERSONAJE);
		Selector selectorEsfera = new Selector(cabecera);
		selectorEsfera.setContents((List) Mapa.getPropertyValue(this.getModel(), Mapa.ESFERASENELMAPA), "nombre")
				.bindValueToProperty(Mapa.ESFERA);

		// Crea el Boton
		Button calcular = new Button(detcabecera);
		calcular.setCaption("                       LLega?                     ");
		calcular.onClick(new MessageSend(this.getModel(), Mapa.CALCULARDISTANCIA));

		// Crea el Label donde muestra el resultado.
		Label puedeLlegar = new Label(detcabecera);
		puedeLlegar.bindValueToProperty(Mapa.PUEDEIR);

		// / Panel 2 ///

		// Esta es la tabla que se arma
		Table<Casillero> table = new Table<Casillero>(muestra, Casillero.class);
		table.bindContentsToProperty(Mapa.CASILLEROS);
		table.bindSelection(Mapa.ACTUALROW);
		this.addColumns(table);

		// / Panel 3 ///

		Label lblnombre = new Label(creador);
		lblnombre.bindValueToProperty(Mapa.LBLNOMBRE);

		TextBox txtNombre = new TextBox(creador);
		txtNombre.bindValueToProperty(Mapa.NUEVOPERSONAJE);

		// Label lblcasillero = new Label(creador);
		// lblcasillero.bindValueToProperty(Mapa.LBLCASILLERO);
		//
		// TextBox txtCasillero = new TextBox(creador);
		// txtCasillero.bindValueToProperty(Mapa.CASILLERO);

		Label lblresistencia = new Label(creador);
		lblresistencia.bindValueToProperty(Mapa.LBLRESISTENCIA);

		TextBox txtResistencia = new TextBox(creador);
		txtResistencia.bindValueToProperty(Mapa.RESISTENCIA);

		Label lblchkpersonaje = new Label(creador);
		lblchkpersonaje.setText("Personaje :");

		CheckBox selPersonaje = new CheckBox(creador);
		selPersonaje.bindValueToProperty(Mapa.SELPERSONAJE);

		Label lblchkesfera = new Label(creador);
		lblchkesfera.setText("Esfera :");

		CheckBox selEsfera = new CheckBox(creador);
		selEsfera.bindValueToProperty(Mapa.SELESFERA);

		Button grabar = new Button(confirmCreador);
		grabar.setCaption("        Crear Objeto        ");
		grabar.onClick(new MessageSend(this.getModel(), Mapa.GRABAROBJETO));

		// selectorEsfera.setContents((List)
		// Mapa.getPropertyValue(this.getModel(), Mapa.ESFERASENELMAPA),
		// "nombre")
		// .bindValueToProperty(Mapa.ESFERA);

		// Panel 4 ///

		Button juntarObjeto = new Button(acciones);
		juntarObjeto.setCaption("        Juntar Esfera        ");
		juntarObjeto.onClick(new MessageSend(this.getModel(), Mapa.AGREGARESFERAAPERSONAJE));

		Button llamarAShengLong = new Button(acciones);
		llamarAShengLong.setCaption("       Llamar a Sheng Long        ");
		llamarAShengLong.onClick(new MessageSend(this.getModel(), Mapa.LLAMARASHENGLONG));

		Label respuestaSheng = new Label(acciones);
		respuestaSheng.bindValueToProperty(Mapa.RESPUESTASHENGLONG);

		// Table<Personaje> inventario = new Table<Personaje>(acciones,
		// Personaje.class);
		// table.bindContentsToProperty(Mapa.PERSONAJESENELMAPA);
		// this.addColumnsInventario(inventario);

	}

	protected void addColumns(Table<Casillero> tabla) {
		Column<Casillero> casilleroColumn = new Column<Casillero>(tabla);
		casilleroColumn
				.setTitle("                                              Casillero                                                    ");
		casilleroColumn.bindContentsToProperty("posicion");

		Column<Casillero> objetoColumn = new Column<Casillero>(tabla);
		objetoColumn
				.setTitle("                                              Objeto                                                       ");
		objetoColumn.bindContentsToProperty("objetoDragonBall");
	}

	// protected void addColumnsInventario(Table<Personaje> table) {
	// Column<Personaje> esferaPersonaje = new Column<Personaje>(table);
	// esferaPersonaje
	// .setTitle("                                              Esferas                                                   ");
	// esferaPersonaje.bindContentsToProperty("nombre");
	//
	// }

	public static void main(String[] args) {
		new MapaWindow().startApplication();
	}

}
